package com.bsj.power.common.config.global;

/**
 * @author yinhao
 * @version 1.0
 * @description 返回状态枚举类
 * @date 2022/8/26
 */
public enum JsonResultEnum {

    SUCCESS(200, "请求成功"),
    PARAM_ERROR(204, "参数错误"),
    PARAM_IS_NOT_NULL(205, "必填参数为空"),
    FAIL(500, "请求失败"),

    //Ope
    SIGN_CHECK_IS_ERROR(1001, "验签失败"),
    PARAM_FIELD_IS_ERROR(1002, "参数错误"),
    TIMED_OUT_REQUEST(1003, "超时请求"),
    DATA_DECRYPTION_FAILED(1004, "数据解密失败"),
    USER_INFO_MATE_FAILED(1005, "用户信息错误"),
    NO_DATA(1006, "暂无数据"),
    NO_FILE_FAIL(1007, "资源文件无效"),
    TRANS_FILE_FAIL(1008, "文件转码异常"),

    // 异常
    EXCEPTION(10000, "网络异常"),
    RUNTIME_EXCEPTION(10001, "内部运行异常"),
    PARAM_CAST_EXCEPTION(10002, "参数转换错误"),
    FEIGN_SERVICE_EXCEPTION(10003, "内部服务异常"),
    NPE(10004, "空指针异常"),
    CLASS_CAST_EXCEPTION(10005, "类型转换错误"),
    IO_EXCEPTION(10006, "IO服务器错误"),
    NO_SUCH_METHOD_EXCEPTION(10007, "未知方法异常"),
    INDEX_OUT_OF_BOUNDS_EXCEPTION(10008, "数组越界异常"),
    HTTP_MESSAGE_NOT_READABLE_EXCEPTION(10009, "400错误"),
    TYPE_MISMATCH_EXCEPTION(10010, "400错误"),
    MISSING_SERVLET_REQUEST_PARAMETER_EXCEPTION(10011, "400错误"),
    HTTP_REQUEST_METHOD_NOT_SUPPORTED_EXCEPTION(10012, "get/post请求方法有误"),
    FAIL_SERVER(10011, "网络错误"),
    SOE(10012, "栈溢出"),
    WAITING_TIMEOUT(10013, "等待超时"),

    // 方法返回判断
    NOT_USER_AND_PASSWORD_ISNULL(11001, "账号或密码不能为空"),
    USER_LOGIN_AUTH_NULL(11002, "登录状态已过期"),
    USER_INFO_ISNULL(11003, "用户信息不存在"),
    NOT_RESET_MYSELF_PASSWORD(11004, "无法重置本账户密码"),
    USER_ROLE_ISNULL(11005, "角色不存在"),
    NOT_AUTH(11006, "无权限"),
    UNKNOWN_PERMISSION(11007, "未知权限标识"),
    ROLE_SIGN_IS_EXIST(11008, "角色标识已存在"),
    ROLE_NOT_EXIST(11009, "角色不存在"),
    ROLE_NOT_DELETE(11010, "角色已绑定,无法删除"),
    NAME_IS_EXIST(11011, "名称已存在"),
    NO_EXPORT_DATA(11012, "无导出数据"),
    TOO_MUCH_MONTH_SPAN(11013, "时间跨度不能大于12个月"),
    TOO_MUCH_DAY_SPAN(11014, "时间跨度不能大于30天"),
    ROLE_NAME_IS_EXIST(11015, "角色名称已存在"),
    START_AND_END_TIME_IS_NULL(11016, "开始与结束时间不能为空"),
    DEFAULT_ROLE_CANNOT_UPDATE_OR_DELETE(11017, "系统默认角色无法修改或删除"),
    TREE_BRANCH_ISNULL(11018, "树分支不存在"),
    EXIST_SON_BRANCH(11019, "存在子分支无法删除"),
    IS_BINDING_BASE_STATION(11020, "已绑定基站无法删除"),
    PARENT_DIRECTORY_ERROR(11021, "上级目录不能为本身或本身的子目录"),
    CANNOT_CHANGE_PARENT(11021, "顶级目录无法更改上级目录"),
    ROLE_TYPE_NOT_EXIST(11022, "角色类型不存在"),

    /******************************************************用户操作***************************************************/
    LOGIN_EXIT(401, "已退出，请重新登录"),
    PERMISSION_EXCEPTION(402, "没有访问权限，请联系管理员授权"),
    ROLE_EXCEPTION(403, "没有角色权限，请联系管理员授权"),
    SERVER_NOT_FOUND(404, "服务未找到"),
    USER_DISABLE(405, "账号已被封禁"),
    USER_IS_NOT_ADMIN(406, "非超级管理员账户,无法删除用户"),
    USER_IS_NOT_ADMIN_UN_OPERATE(407, "非超级管理员账户,无法操作"),
    ACCOUNT_PASSWORD_NULL(20001, "账号密码不能为空"),
    USER_NOT_EXIST(200002, "用户不存在"),
    PASSWORD_ERROR(200003, "密码错误"),
    PASSWORD_CHECK_FAIL(200004, "请输入大写小写字母、数字、特殊符号，长度不小于八！"),
    CAPTCHA_NULL_ERROR(200005, "验证码不能为空"),
    CAPTCHA_INVALID(200006, "验证码已失效"),
    CAPTCHA_ERROR(200007, "验证码错误"),
    USER_NAME_EXIST(200008, "用户名已存在"),
    PHONE_FORMAT_ERROR(200009, "手机号格式错误"),
    NEW_PASSWORD_NULL(200010, "新密码不能为空"),
    LOGIN_AGAIN(200011, "密码修改完成，请重新登录"),
    NOT_DELETE_ITSELF(200012, "无法删除当前使用账号"),
    USER_UPDATE_NAME_EXIST(200013, "待更换的用户名已存在,无法修改"),
    SYSTEM_CONFIG_IS_ONLY(200014, "无法新增多条系统规则"),
    PASSWORD_ARE_EQUAL(200015, "旧密码与新密码不能相同"),
    USER_LOCK(200016, "密码错误导致账号达到连续登录失败次数预设值，已锁定，请联系管理员解锁或等待自动解锁"),
    CHANGE_PASSWORD(200017, "账号已超过6个月没更换密码，请更换"),


    /******************************************************人员操作***************************************************/
    EMP_NO_EXIST(30001, "工号已存在"),
    PERSONNEL_NOT_EXIST(30002, "人员不存在"),
    ID_CARD_NO_EXIST(30003, "身份证号已存在"),
    PERSONNEL_BIND_CARD(30004, "人员已绑卡，无法删除"),
    EMP_NO_CANNOT_UPDATE(30005, "工号无法修改"),
    PERSONNEL_INFO_ERROR(30006, "人员信息错误"),
    PERSONNEL_ALREADY_BIND_CARD(30007, "该人员已绑当前卡或其他卡，请核实或退卡"),
    PERSONNEL_NOT_BIND_CARD(30008, "该人员未绑卡，无需退卡"),
    ID_CARD_NO_FORMAT_ERROR(30009, "身份证号格式错误"),


    /******************************************************定位设备***************************************************/
    DEVICE_NAME_EXIST(40001, "设备名已存在"),
    LOCATION_DEVICE_NOT_EXIST(40002, "定位设备不存在"),
    LOCATION_DEVICE_BIND_CARD(40003, "该批设备中有设备已绑卡，无法删除"),
    LOCATION_DEVICE_ALREADY_BIND_PERSONNEL(40004, "该卡已绑当前人员或其他人员，请核实或退卡"),
    LOCATION_DEVICE_NOT_BIND_PERSONNEL(40005, "该卡未绑人员，无需退卡"),
    DEVICE_NAME_CANNOT_UPDATE(40006, "设备号无法修改"),
    DEVICE_ID_EXIST(40007, "国标设备编号已经存在"),
    DEVICE_INFO_IS_NULL(40008, "第三方平台无此设备信息"),
    DEVICE_NOT_EXIST(40009, "设备不存在"),
    DEVICE_OFFLINE(40010, "设备离线"),
    PTZ_CONTROL_LOCKED(40011, "设备云台控制已锁定"),
    ANCHOR_DEVICE_UNABLE_TO_BIND(40012, "基站设备无绑卡操作"),
    ANCHOR_DEVICE_NOT_EXIST(40013, "基站设备不存在"),
    SRC_INDEX_EXIST(40014, "面板机编号已存在"),
    DEVICE_NO_EXIST(40015, "绑卡机编号已存在"),
    CVR_DEVICE_OFFLINE(40016, "CVR设备离线"),
    POS_ROAD_IS_NULL(40017, "路线信息为空"),
    LOCATION_DEVICE_ALREADY_BIND(40018, "设备已绑定，请先退卡"),
    LOCATION_DEVICE_IS_LOCK_IN(40018, "设备已锁定，无法绑卡"),

    /******************************************************围栏***************************************************/
    PATH_EXIST(50001, "围栏已存在"),
    PATH_NOT_EXIST(50002, "围栏不存在"),
    SCENE_NOT_EXIST(50003, "所属场景不存在"),
    PATH_CANNOT_DELETE(50004, "该围栏下还有视频设备，无法删除"),
    PATH_WHITE_LIST_IS_NULL(50005, "区域白名单不能为空"),
    PATH_BE_DELETED(50006, "该围栏已被删除，无法找到对应摄像头"),
    PATH_NO_BINDING_VIDEO_DEVICE(50006, "该围栏未绑定摄像头"),
    PATH_BINDING_PERSON_GROUP(50007, "该围栏已绑定管理组，无法删除"),


    /******************************************************组织***************************************************/
    GROUP_NAME_EXIST(60001, "组织已存在"),
    GROUP_NOT_EXIST(60002, "组织不存在"),
    PARENT_GROUP_NOT_EXIST(60003, "所属组织不存在"),
    PARENT_GROUP_CANNOT_UPDATE(60004, "所属组织无法修改"),
    PERSONNEL_NOT_NULL(60005, "该组织下还存有人员无法删除"),
    GROUP_EXIST_SON(60006, "该组织下还存有子组织无法删除"),

    /******************************************************报警***************************************************/
    ALARM_NOT_EXIST(70001, "报警不存在"),
    ALARM_TYPE_NOT_EXIST(70002, "报警类型不存在"),
    ALARM_LEVEL_IS_NULL(70003, "报警级别不能为空"),
    ALARM_LEVEL_NOT_EXIST(70004, "报警级别不存在"),
    ALARM_TYPE_IS_NULL(70005, "报警类型不能为空"),
    ALARM_NAME_AND_ALARM_LEVEL_NOT_MATCH(70006, "报警名称和报警级别不匹配"),

    /******************************************************工单***************************************************/
    BIND_TRAIN_IS_NOT_NULL(80001, "包含已绑定培训计划的课程,无法删除"),
    JOB_INFO_IS_NULL(80002, "工单信息不存在"),
    SMALL_TIME_INTERVAL(80003, "间隔时间不能低于5分钟"),

    /****************************************************房间******************************************************/
    ROOM_NO_EXIST(90001, "房间号已存在"),
    ROOM_NOT_EXIST(90002, "房间不存在"),
    ROOM_EXIST_VIDEO_DEVICE(90003, "该房间下存在视频设备，无法删除"),

    /****************************************************人员组******************************************************/
    PERSON_GROUP_NAME_EXIST(100001, "组名称已存在"),
    PERSON_GROUP_EXIST(100002, "分组不存在"),
    PERSON_GROUP_EXIST_USER(100003, "该分组下存在用户，无法删除"),
    PERSON_GROUP_EXIST_PERSONNEL(100004, "该分组下存在人员，无法删除"),
    PERSON_GROUP_TYPE_CANNOT_UPDATE(100005, "组类型无法修改"),

    /**************************************************权限******************************************************/
    MENU_IS_NOT_EXIST(110001, "权限不存在"),
    MENU_NAME_IS_NOT_NULL(110002, "权限名称已存在"),
    MENU_SIGN_IS_NOT_NULL(110003, "权限标识已存在"),

    /**************************************************监控******************************************************/
    CRON_FORMAT_ERROR(120001, "Cron表达式不正确"),
    RMI_FORMAT_ERROR(120002, "目标字符串不允许rmi,ldap,http调用"),
    STRING_FORMAT_ERROR(120003, "目标字符串不允许rmi,ldap,http调用"),
    SYS_JOB_IS_NOT_EXIST(120004, "任务不存在"),


    /*************************************/
    // 视频服务全局错误码，暂时未合并，整合后删除ErrorCode枚举类
//    SUCCESS_0(0, "成功"),
    ERROR100(100, "失败"),

    ERROR400(400, "参数或方法错误"),

    ERROR404(404, "资源未找到"),

    ERROR403(403, "无权限操作"),

    ERROR401(401, "请登录后重新请求"),

    ERROR500(500, "系统异常");

    private Integer code;
    private String msg;

    JsonResultEnum(Integer code, String message) {
        this.code = code;
        this.msg = message;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}
